package edu.csl.study.springboot.common;

import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * 线程的本地缓存。
 * 注意点：使用时一定要在最后调用remove方法，不然会引起内存泄漏问题！
 * 
 * @author caoshouling
 *
 */
public class ThreadContextHolder {
	
	private static final ThreadLocal<Map<String,Object>> requestHoderMap = new ThreadLocal<>();
	/**
	 * 获取线程上下文Map
	 * @return
	 */
	public static Map<String,Object> getThreadContextMap() {
		return requestHoderMap.get();
	}
	/**
	 * 设置线程上下文Map
	 * @param threadContextMap
	 * @return
	 */
	public static void  setThreadContextMap(Map<String,Object> threadContextMap) {
		requestHoderMap.set(threadContextMap);
	}
	/**
	 * 添加数据
	 * @param key
	 * @param value
	 */
	public static void put(String key ,Object value) {
		Map<String,Object> map = requestHoderMap.get();
		//这里应该没有并发问题，因为map都是不同的线程的值。
		if(map != null){
			map.put(key, value);
		}else{
			map = new  HashMap<>();
			map.put(key, value);
			requestHoderMap.set(map);
		}
		
	}
	/**
	 * 获取数据
	 * @param key
	 * @return
	 */
	public static Object get(String key) {
		Map<String,Object> map = requestHoderMap.get();
		if(map != null){
			return map.get(key);
		}
		return null;
	}
	
	public static void remove() {
		requestHoderMap.remove();
	}


	public static void main(String[] args) {
		
		Snowflake snowflake = IdUtil.getSnowflake(20, 1);
		for(int i = 0 ; i <1000; i++){
			System.out.println(snowflake.nextId());
		}
		   System.out.println(UUID.randomUUID().toString().replaceAll("-", ""));
		   System.out.println(IdUtil.objectId());
		   System.out.println(IdUtil.fastUUID());
		   System.out.println(IdUtil.fastSimpleUUID());
		
		
	}
}
